﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using AutoMapper;
using System.Transactions;

namespace DAO
{
    public class BangCapDAO
    {
        public static List<BangCapDTO> DocDanhSach()
        {
            //tạo list
            List<BangCapDTO> list = new List<BangCapDTO>();

            //khởi tạo datacontext
            QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();
            var ds = from n in context.BangCaps
                            select n;

            //duyệt danh sách
            foreach(BangCap n in ds)
            {
                //mapping từ linQ vào dto
                BangCapDTO dto = new BangCapDTO();
                Mapper.CreateMap<BangCap, BangCapDTO>();
                dto = Mapper.Map<BangCap, BangCapDTO>(n);
                //thêm vào list
                list.Add(dto);
            }

            //trả về kq
            return list;
        }

        public static bool Them(BangCapDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //tạo đối tượng
                BangCap bangcap = new BangCap();

                //mapping
                Mapper.CreateMap<BangCapDTO, BangCap>();
                bangcap = Mapper.Map<BangCapDTO, BangCap>(dto);

                //thêm vào ds khi nhấn submit
                context.BangCaps.InsertOnSubmit(bangcap);

                //thực hiện thay đổi
                context.SubmitChanges();

                //Đọc dòng vừa ghi để lưu lại mã lên trên
                dto.MaBangCap = bangcap.MaBangCap;

                //transaction thành công
                scope.Complete();
            }
            return true;
        }

        public static bool Xoa(BangCapDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //Lấy dữ liệu phù hợp với dto
                BangCap bangcap = context.BangCaps.Single(c => c.MaBangCap == dto.MaBangCap);
                
                //Xóa
                context.BangCaps.DeleteOnSubmit(bangcap);
                
                //thực hiện thay đổi
                context.SubmitChanges();
                
                //transaction thành công
                scope.Complete();
            }
            return true;
        }

        public static bool CapNhat(BangCapDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //Lấy dữ liệu phù hợp với dto
                BangCap bangcap = context.BangCaps.Single(c => c.MaBangCap == dto.MaBangCap);
                bangcap.TenBangCap = dto.TenBangCap;
               
                //thực hiện thay đổi
                context.SubmitChanges();

                //transaction thành công
                scope.Complete();
            }
            return true;
        }
    }
}
